package com.jinhongone.pattern.behavior.visitor.doubleDispatch;

/**
 * @author jinho
 * @className Test
 * @description todo 类描述
 * @date 2025/4/17 11:09
 */
public class Test {

    public static void main(String[] args) {
        Animal a = new Animal();
        Animal d = new Dog();
        Animal c = new Cat();
        Execute e = new Execute();
        a.accept(e);
        d.accept(e);
        c.accept(e);

//        animal
//        dog
//        cat
        /*
        过程：三个变量静态类型都是Animal，调用accept方法时是根据动态分派（java中的动态绑定）找到重写的方法，改变了各对象调用execute方法时传递参数的静态类型，
        从而使各参数能够找到匹配的重载方法，间接达到了动态分派的目的。
        结论：通过先调用方法重写，改变参数静态类型，在调用方法重载，2次分派达到重载也能达到动态分派的目标。
        */
    }
}
